package 代码记录.指定公司代码练习记录.华为_2024.分值200;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * @author zx
 * @create 2024-02-16 14:50
 * 里面有全排列思想的应用，感觉自己做不出来；人家的代码可以看懂
 */
public class 田忌赛马_48 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 读入输入
        int[] a = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
        int[] b = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
        // 调用函数并输出结果
        List<int[]> resList = new ArrayList<>();
        permute(a, b, 0, resList);
        System.out.println(resList.size());
        for (int[] arr : resList) {
            System.out.println(Arrays.toString(arr).replaceAll("[\\[\\],]", ""));
        }
    }

    /**
     * 找出数组a的所有排列,并检查每个排列是否满足条件(调用isValid方法)
     */
    private static void permute(int[] a, int[] b, int start, List<int[]> resList) {
        if (start == a.length - 1) {
            if (isValid(a, b)) {
                resList.add(Arrays.copyOf(a, a.length));
            }
        } else {
            for (int i = start; i < a.length; i++) {
                swap(a, start, i);
                permute(a, b,start + 1, resList);
                swap(a, start, i);
            }
        }
    }

    private static boolean isValid(int[] a, int[] b) {
        for (int i = 0; i < b.length; i++) {
            if (a[i] <= b[i]) {
                return false;
            }
        }
        return true;
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
}
